.. _cemIxArcAStart: cemIxArcAStart ============== -------------- SYNOPSIS -------- .. code-block:: none VT_I4 cemIxArcAStart( VT_I4 MapIndex, VT_R8 XCentOffset, VT_R8 YCentOffset, VT_R8 EndAngle ) DESCRIPTION ----------- - 중심 좌표와 원호의 각도를 매개변수로 하여 원호 보간 이송을 수행합니다. 이때 중심 좌표는 상대 좌표로 표현됩니다. - 모션을 시작시킨 후에 바로 반환됩니다. - (자세한 내용은 SW 메뉴얼 참고) PARAMETER --------- - MapIndex : 맵 번호(Map index). 이 맵 번호를 사용하기 전에 먼저 cemIxMapAxes 함수를 통하여. 해당 맵 번호에 유효한 축들이 맵핑 되어 있어야 합니다. - XCentOffset : 현재 위치(시작 위치)로부터 원의 중심까지 X 축 상대 좌표 값. - YCentOffset : 현재 위치(시작 위치)로부터 원의 중심까지 Y 축 상대 좌표 값. - EndAngle : 원호 보간 이송을 완료할 목표 지점의 현재 위치에 대한 각도 값을 Degree(°)값으로. 지정합니다. 각도의 부호가 (+)이면 반 시계방향, (-)이면 시계방향으로의 이동을 의미합니다. RETURN VALUE ------------ +----------------+--------------------------------------------------------+ | Value | Meaning | +================+========================================================+ | 음수 | 수행 실패. 자세한 내용은 ‘에러처리’ 편을 참고합니다. | +----------------+--------------------------------------------------------+ | 0 (ceERR_NONE) | 수행 성공. | +----------------+--------------------------------------------------------+ .. note:: cemIxArcAStart 함수를 사용하는 경우에는 cemIxIsDone 함수나 cemIxWaitDone 함수를 사용하여 모션의 완료를 확인할 수 있습니다. Example ------- .. code-block:: cpp :linenos: C/C++ #include “ceSDK.h” #include “ceSDKDef.h” long nIxMap = 0; // 보간 맵 설정 long nNodeID = 1; // 해당 원격 노드 ID 설정 void OnSetIxConfig () { // 0 번 축과 1 번 축을 보간 맵으로 설정합니다. cemIxMapAxes ( nIxMap, nNodeID, cemX1_MASK | cemY1_MASK, 0 ); // 각 축의 속도를 설정합니다. cemCfgSpeedPattern_Set ( cemX1, cemSMODE_T, 1000, 5000, 5000 ); cemCfgSpeedPattern_Set ( cemY1, cemSMODE_T, 1000, 5000, 5000 ); } void OnIxArcA_Move() { /* 맵에 포함된 축의 보간 마스터 속도를 설정합니다. 작업 속도 100%, 가속도의 80%, 감속도의 80% 로 설정합니다. */ cemIxSpeedPattern_Set ( nIxMap, CE_FALSE, cemSMODE_T, 100, 80, 80 ); double fDistList[2]; //P1 에서 P2 로 이동합니다. fDistList[0] = 1000; fDistList[1] = 0; cemIxLine( nIxMap, fDistList, CE_FALSE ); // P2 에서 P3 로 이동합니다. cemIxArcA( nIxMap, 0, 500, 90, CE_FALSE ); // P3 에서 P4 로 이동합니다. fDistList[0] = 0; fDistList[1] = 1000; cemIxLine( nIxMap, fDistList, CE_FALSE ); // P4 에서 P5 로 이동합니다. cemIxArcA( nIxMap, -500, 0, 90, CE_FALSE ); // P5 에서 P6 로 이동합니다. fDistList[0] = 1000; fDistList[1] = 0; cemIxLine( nIxMap, fDistList, CE_FALSE ); // P6 에서 P7 로 이동합니다. cemIxArcA( nIxMap, 0, -500, 90, CE_FALSE ); // P7 에서 P8 로 이동합니다. fDistList[0] = 0; fDistList[1] = -1000; cemIxLine( nIxMap, fDistList, CE_FALSE ); // P8 에서 P1 로 이동합니다. cemIxArcA( nIxMap, 500, 0, 90, CE_FALSE ); }